<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript">
    /*
     *函数作用域
     *调用函数时创建函数作用域，函数执行完毕后，函数作用域销毁
     *每调用一次函数就会创建一个新的函数作用域，他们之间是相互独立的
     *函数作用域可以访问到全局作用域的变量，在全局作用域中无法访问到函数作用域的变量
     *当在函数作用域操作一个变量时，他会先在自身作用域中寻找，如果有就直接使用
     *如果没有则向上一级作用域中寻找，直到找到全局作用域
     *如果全局作用域中依然没有找到，则会报错EeferenceError
     *如果想访问全局变量，使用window.属性名即可
     */
    function fun3()
    {
        console.log(a);
        var a=35;
    }
    fun3();//控制台输出undefined
    /*
     *在函数作用域也有声明提前的特性
     *使用var关键字声明的变量，会在函数中所有的代码执行之前被声明
     *函数声明也会在函数中所有的代码执行前被声明
     *在函数中，不使用var声明的变量都会成为全局变量
     */
    var c=55;
    function fun4()
    {
        console.log("c="+c);
        var c=10;
    }
    fun4();
    //定义形参就相当于在函数作用域中声明了变量
    //如果在函数中声明了一个c，那么就会显示undefined，如果没声明，那么控制台就会引用全局变量
    </script>
</head>
<body>
    
</body>
</html>